Seriova komunikace

Otázka od: blue22@quick.cz

13. 10. 2004 15:59

Mam problem pri seriove komunikaci na notebooku
D6, Win200Prof En, Synapse

1. Odeslu data pres COM1 a aniz bych mel na portu fyzicky nejake propojeni, ty
data mi opet dojdou zpet. Na stolnim PC se to nedeje.

2. Na jakemkoli PC s propojkou Txd-RxD mi data dojdou, ale ne vsechny at
nastavim jakykoli TimeOut. Vzdy dojde jejich cast a zbytek dat vzdy prectu pri
dalsim cteni. Stringy jsou dlouhe cca 30 znaku

Setkal se s tim uz nekdo ?
Honza


Ukazka kodu:
...

Cport:=TBlockSerial.Create;
Cport.Connect('COM1');
Cport.Config(9600,8,'N',SB1,false,false);
....


Udalost Button click
var act,i : integer;
        TimeOut: integer;
        s,x : string;
begin

  s:='String to send';
  Cport.SendString(s);

  Edit1.Text:=Cport.GetErrorDesc(Cport.LastError);

  while Cport.SendingData>0 do;

  TimeOut:=SpinEdit1.Value;
  x:=Cport.RecvPacket(TimeOut);
  for i:=1 to length(x) do ListBox1.Items.Add(inttostr(ord(x[i])));

  Edit1.Text:=Cport.GetErrorDesc(Cport.LastError);
  ListDataReceived.Items.Add(x);

end;
 


Odpovedá: Lukas Gebauer

13. 10. 2004 18:05

> 1. Odeslu data pres COM1 a aniz bych mel na portu fyzicky nejake
> propojeni, ty data mi opet dojdou zpet. Na stolnim PC se to nedeje.

V Synaseru rozhodne zadny loopback neni... nesetkal jsem se s tim, asi
nejaka vlastnost tveho notebooku, nejaky interni loopback? ;-O

> 2. Na jakemkoli PC s propojkou Txd-RxD mi data dojdou, ale ne vsechny
> at nastavim jakykoli TimeOut. Vzdy dojde jejich cast a zbytek dat vzdy
> prectu pri dalsim cteni. Stringy jsou dlouhe cca 30 znaku

Seriovy port je proud dat... nikdy nemas zaruceno, ze jednim ctenim
prectes presne stejne mnozstvi dat ktere jsi poslal. To je zcela
normalni. Zvlast kdyz to ctes pomoci recvpacket, ktery proste precte vse,
coz je zrovna k dispozici k precteni, coz rozhodne nemusi byt vse!

Zkus ty data poslat pomoci:

Cport.SendString(s+CRLF);

a pak je zkus precist pomoci RecvString.... a budes mit po problemu.

> while Cport.SendingData>0 do;

Fuj! Proc tohle delas? neni to vubec potreba... a kdyz uz to potrebujes
(v praxi jsem to jeste nikdy nepotreboval...), tak misto teto smycky,
ktera ti bude zrat 100% strojoveho casu, pouzij radeji funkci canWrite,
ktera zere 0% CPU.  


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
WEB: http://www.ararat.cz/synapse - Synapse Delphi and Kylix TCP/IP Library



Odpovedá: Honza

13. 10. 2004 18:29

> > 1. Odeslu data pres COM1 a aniz bych mel na portu fyzicky nejake
> > propojeni, ty data mi opet dojdou zpet. Na stolnim PC se to nedeje.
>
> V Synaseru rozhodne zadny loopback neni... nesetkal jsem se s tim, asi
> nejaka vlastnost tveho notebooku, nejaky interni loopback? ;-O

 Bohuzel to delaji vsechny notebooky ve firme, coz je divne, nechapu to. Asi
abych si sehnal jiny pocitac
 Stolni PC je v pohode.

>
> > 2. Na jakemkoli PC s propojkou Txd-RxD mi data dojdou, ale ne vsechny
> > at nastavim jakykoli TimeOut. Vzdy dojde jejich cast a zbytek dat vzdy
> > prectu pri dalsim cteni. Stringy jsou dlouhe cca 30 znaku
>
> Seriovy port je proud dat... nikdy nemas zaruceno, ze jednim ctenim
> prectes presne stejne mnozstvi dat ktere jsi poslal. To je zcela
> normalni. Zvlast kdyz to ctes pomoci recvpacket, ktery proste precte vse,
> coz je zrovna k dispozici k precteni, coz rozhodne nemusi byt vse!
>
> Zkus ty data poslat pomoci:
>
> Cport.SendString(s+CRLF);
>
> a pak je zkus precist pomoci RecvString.... a budes mit po problemu.
Bohuzel to takto asi nepujde, komunikuju se zarizenim, ktere na konci
vyzaduje CR ale odpovida bez nej. proste posle behem nejake doby jen ruzny
pocet ASCII znaku, nikdy nijak neukoncene (merak americke konstrukce)
Proto ty hratky a badani nad prijetim behem timeoutu

>
> > while Cport.SendingData>0 do;
>
> Fuj! Proc tohle delas? neni to vubec potreba... a kdyz uz to potrebujes
> (v praxi jsem to jeste nikdy nepotreboval...), tak misto teto smycky,
> ktera ti bude zrat 100% strojoveho casu, pouzij radeji funkci canWrite,
> ktera zere 0% CPU.  
 Jo, jo, jasne, to je jen vyvojova zalezitost,
chtel jsem jen pred ctenim pockat, az bude vse odeslano nez to zacnu cist,
ale stejne to chodi ruzne, asi zalezi na vytizeni OS

Honza

>
>
> --
> Lukas Gebauer.
>
> E-mail: gebauerl@mlp.cz
> WEB: http://www.ararat.cz/synapse - Synapse Delphi and Kylix TCP/IP
Library
>
>
>
>